home *** CD-ROM | disk | FTP | other *** search
/ Java Programmer's Toolkit / Java Programmer's Toolkit.iso / applets / clock2 / beta / clock.jav < prev    next >
Text File  |  1995-12-15  |  8KB  |  250 lines

  1. /* ----------------------------------------------------------------
  2.  * Clock 2.0 Beta version, Copyright (c) 1995 Nils Hedstrom, All Rights Reserved.
  3.  * Permission to use, copy, modify, and distribute this software and its
  4.  * documentation for NON-COMMERCIAL purposes and without fee is hereby
  5.  * granted provided that this copyright notice and appropiate documention
  6.  * appears in all copies.
  7.  * 
  8.  * NILS HEDSTROM MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
  9.  * SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
  10.  * LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  11.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. NILS HEDSTROM SHALL NOT BE LIABLE
  12.  * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  13.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  14.  * 
  15.  * For documentation look at http://www-und.ida.liu.se/~d94nilhe/java/applets.html */
  16.  
  17. import java.awt.Graphics;
  18. import java.awt.Polygon;
  19. import java.awt.Color;
  20. import java.awt.Image;
  21. import java.util.Date;
  22. import java.net.URL;
  23. import java.net.MalformedURLException;
  24. import java.io.BufferedInputStream;
  25. import java.util.StringTokenizer;
  26. import java.lang.Math;
  27. import Needle;
  28.  
  29.  
  30. public class Clock extends java.applet.Applet implements Runnable
  31. {
  32.   int width,height,num_lines,sleep,timezone;
  33.   Polygon clockBackground;
  34.   URL homepage;
  35.   private Needle hour,minute,second;
  36.   double pi=3.1415926535f;
  37.   Color clockBackground_col,clockBackgroundBorder_col,backgroundBorder_col,background_col;
  38.   Thread animate=null;
  39.   Image backBuffer;
  40.   Graphics backGC;
  41.   
  42.   public void init() // Init all the variables and classes
  43.     {
  44.       try {
  45.     homepage=new URL("http://www-und.ida.liu.se/~d94nilhe/java/applets.html");
  46.       } catch (MalformedURLException e) {}
  47.       hour=new Needle(readColor(getStringAttribute("hour_col",null),Color.red),
  48.               readColor(getStringAttribute("hour_border_col",null),Color.black),
  49.               getIntAttribute("hour_type",0,3,3),
  50.               getIntAttribute("hour_width",0,7,100),
  51.               size().width/2,size().height/2,
  52.               (size().width*getIntAttribute("hour_len",0,90,100))/200,
  53.               (size().height*getIntAttribute("hour_len",0,70,100))/200,0.);
  54.       minute=new Needle(readColor(getStringAttribute("minute_col",null),Color.green),
  55.             readColor(getStringAttribute("minute_border_col",null),Color.black),
  56.             getIntAttribute("minute_type",0,3,3),
  57.             getIntAttribute("minute_width",0,5,100),
  58.             size().width/2,size().height/2,(size().width*getIntAttribute("minute_len",0,75,100))/200,
  59.             (size().height*getIntAttribute("minute_len",0,90,100))/200,0.);
  60.       second=new Needle(readColor(getStringAttribute("second_col",null),Color.blue),
  61.             readColor(getStringAttribute("second_border_col",null),Color.black),
  62.             getIntAttribute("second_type",0,3,3),
  63.             getIntAttribute("second_width",0,3,100),
  64.             size().width/2,size().height/2,(size().width*getIntAttribute("second_len",0,90,100))/200,
  65.             (size().height*getIntAttribute("second_len",0,90,100))/200,0.);
  66.       updateNeedles();
  67.       num_lines=getIntAttribute("num_lines",3,12,1000);
  68.       makeClockBackground();
  69.       sleep=getIntAttribute("sleep",5,1000,20000);
  70.       clockBackground_col=readColor(getStringAttribute("clock_background_col",null),Color.gray);
  71.       clockBackgroundBorder_col=readColor(getStringAttribute("clock_background_border_col",null),Color.gray);
  72.       background_col=readColor(getStringAttribute("background_col",null),Color.lightGray);
  73.       backgroundBorder_col=readColor(getStringAttribute("background_border_col",null),Color.lightGray);
  74.       timezone=getIntAttribute("timezone",-12,-13,12);
  75.       resize(size().width,size().height);
  76.       try
  77.     {
  78.       backBuffer = createImage(size().width, size().height);
  79.       backGC = backBuffer.getGraphics();
  80.     }
  81.       catch (Exception e) backGC=null;
  82.     }
  83.   
  84.   public void updateNeedles() // This updates the angle of each needle.
  85.     {
  86.       Date today= new Date();
  87.       if(timezone!=-13)
  88.     {
  89.       int hours=today.getHours();
  90.       int minutes=today.getMinutes();
  91.       hours+=timezone+today.getTimezoneOffset()/60;
  92.       minutes+=today.getTimezoneOffset()%60;
  93.       today.setMinutes(minutes);
  94.       today.setHours(hours);
  95.     }
  96.       second.setAngle(2.*pi*(today.getSeconds()-15)/60.);
  97.       minute.setAngle(2.*pi*(today.getMinutes()-15)/60.);
  98.       hour.setAngle(2.*pi*((today.getHours()%12-3)/12.+today.getMinutes()/720.));
  99.     }
  100.   
  101.   public void paintApplet(Graphics g)  // Paint the applet 
  102.     {
  103.       drawClockBackground(g);
  104.       hour.drawNeedle(g);
  105.       minute.drawNeedle(g);
  106.       second.drawNeedle(g);
  107.     }      
  108.   
  109.   
  110.   public void update(Graphics g) // When update is called
  111.     {
  112.       if (backBuffer != null) 
  113.     { 
  114.       // double-buffering available
  115.       backGC.setColor(background_col);
  116.       backGC.fillRect(0,0,size().width,size().height);
  117.       backGC.setColor(backgroundBorder_col);
  118.       backGC.drawRect(0,0,size().width-1,size().height-1);
  119.       paintApplet(backGC);
  120.       g.drawImage(backBuffer, 0, 0, this);
  121.     } else 
  122.       {
  123.         // no double-buffering
  124.         g.clearRect(0,0,size().width,size().height);
  125.         paintApplet(g);
  126.       }
  127.     }
  128.   public void run() //Run the applet
  129.     {
  130.       while (true) 
  131.     {
  132.       updateNeedles();
  133.       repaint();
  134.       try {Thread.sleep(sleep);} catch (InterruptedException e){}
  135.       
  136.     }
  137.     }
  138.   
  139.   public boolean mouseEnter(java.awt.Event evt) // When the mouse enters the applet
  140.     {
  141.       getAppletContext().showStatus("Who made this clock?");
  142.         return true;
  143.     }
  144.   
  145.   public boolean mouseExit(java.awt.Event evt) // When the mouse leaves the applet
  146.     {
  147.       getAppletContext().showStatus("");
  148.       return true;
  149.     }
  150.   
  151.   public boolean mouseDown(java.awt.Event evt, int x,int y) // When a mouse button is pressed 
  152.     {
  153.       getAppletContext().showDocument(homepage);
  154.       return true;
  155.     }
  156.  
  157.   public void makeClockBackground() // Creates a polygon-background with num_lines-corners
  158.     {
  159.       double add,count;
  160.       clockBackground=new Polygon();
  161.       add=2.*pi/num_lines;
  162.       for(count=0;count<=2.*pi;count+=add)
  163.     {
  164.       clockBackground.addPoint(size().width/2+(int)(size().width*Math.cos(count)/2.),
  165.               size().height/2+(int)(size().height*Math.sin(count)/2.));
  166.     }
  167.     }
  168.       
  169.   public void drawClockBackground(Graphics g) // Draws the background of the Clock
  170.     {
  171.       g.setColor(clockBackground_col);
  172.       g.fillPolygon(clockBackground);
  173.       g.setColor(clockBackgroundBorder_col);
  174.       g.drawPolygon(clockBackground);
  175.     }
  176.  
  177.   public void start()  // When the applet is started 
  178.     {
  179.       if (animate == null) {
  180.     animate = new Thread(this);
  181.     animate.start();
  182.       }
  183.     }
  184.     
  185.   public void stop() // When the applet is stopped 
  186.     {
  187.       if (animate != null) {
  188.     animate.stop();
  189.     animate=null;
  190.       }
  191.     }
  192.   
  193.   
  194.   public String getStringAttribute (String att, String def) // Get a string parameter 
  195.     {
  196.       String ret;
  197.       
  198.       try {
  199.     ret = getParameter(att);
  200.     if (ret.length() < 1)
  201.       return def;
  202.     return ret;
  203.         } catch(Exception e) {
  204.           return def;
  205.         }
  206.       
  207.     }   
  208.   
  209.   public Color readColor(String aColor, Color aDefault) // Creates a color from a string
  210.     {
  211.       if (aColor == null) { return aDefault; }
  212.       
  213.       int r;
  214.       int g;
  215.       int b;
  216.       StringTokenizer st = new StringTokenizer(aColor, ",");
  217.       
  218.       try {
  219.     r = Integer.valueOf(st.nextToken()).intValue();
  220.     g = Integer.valueOf(st.nextToken()).intValue();
  221.       b = Integer.valueOf(st.nextToken()).intValue();
  222.     return new Color(r,g,b);
  223.       }
  224.       catch (Exception e) {
  225.     return aDefault;
  226.       }
  227.     }
  228.   
  229.   public int getIntAttribute (String att, int min, int def, int max) // Get a integer parameter 
  230.     {
  231.         try {
  232.           int ret = Integer.parseInt(getParameter(att));
  233.           if (ret < min)
  234.         return min;
  235.           if (ret > max)
  236.         return max;
  237.           return ret;
  238.         } catch(Exception e) {
  239.           return def;
  240.         }
  241.         
  242.       } 
  243.   
  244. }
  245.  
  246.  
  247.  
  248.  
  249.  
  250.